歡迎大家參加 Claude Code 最佳實踐講座。
在這次演講中,我會從高層次介紹 Claude Code 是什麼。然後我們會稍微深入了解 Claude Code 的運作原理。接著了解這些,因為知道你的工具如何運作是很有用的,我們會討論 Claude Code 的良好使用案例,以及我們從內部和使用者那裡整理出來的最佳實踐,讓你能最大化利用這個工具。
但在開始之前,我想先簡單自我介紹,談談我是如何站上這個舞台的。
我叫 Cal,大約一年半前加入 Anthropic,協助成立一個叫做 Applied AI 的團隊。Applied AI 團隊的使命,是幫助我們的客戶和合作夥伴在 Claude 上構建出優秀的產品和功能。所以這真正的意思是,我花了很多時間用 Claude 去提示,以獲得這些模型的最佳輸出。
話說回來,我也很喜歡寫程式。我絕對是那種會開始很多專案的人,有些瘋狂的想法,然後卻從未完成它們。所以我有一個程式的墳場,那些程式我開始過,但從未真正完成。不過我總是在創造新的東西。
去年年底,我在 Slack 上,聽說一些人正在使用一個新工具。他們說那個工具非常酷。於是某個星期五晚上,我下載了那個後來成為 Claude Code 的工具。我將它丟進了我想要建立的一個新的筆記應用程式裡。
我整個週末都帶著筆記型電腦走來走去。我超級上癮地一直看著 Claude Code 運作。然後我按下 Enter。我會切換到瀏覽器並重新整理頁面。我看著一個龐大、強大的應用程式就在我眼前組合起來。我比自己一個人操作時走得更遠。真的讓我大開眼界。
在做這些的時候,我有點擔心。我想,我對這些東西的運作方式多少有點了解。所以我正在想,天啊,我用掉了很多代幣。我希望我不會惹上麻煩,也沒有人注意到我其實沒有真正為 Anthropic Code 做出貢獻。
但我不知道的是,Claude Code 團隊建立了一個內部排行榜,追蹤所有 Anthropic 員工使用情況。而在週末期間,我迅速躍升至榜首。因此,透過這個,我認識了 Boris 和 Kat 以及一些早期的 Claude Code 團隊成員。我開始跟他們聊天,說,嘿,我很喜歡這個工具。我也對提示有很深的了解。我能幫你們嗎?於是我就加入了。
現在我成為團隊的核心貢獻者之一。我做了很多工作——我在提示系統提示、工具的運作方式、工具描述和工具結果上工作,同時我也負責如何評估這個工具。所以當我們考慮更改提示時,我們怎麼知道我們的改變是讓事情變得更好或至少沒變壞,而不是完全毀掉了 Claude Code?
說到這裡,我們開始深入探討。這是我現在對 Claude Code 的心智模型,以及當人們問我時我會如何描述它。
Claude Code 就像那個什麼事情都用終端機操作的同事。他們就是那種從來不碰 GUI 的人。他們是高手。我想起我還是初級工程師時,有個導師。我會走到他桌前。然後說,嘿,Tony,你能幫我解決這個 Bug 嗎?他就會迅速操作他的終端機。他會執行各種瘋狂的 bash 指令,並在 Vim 裡面改來改去。我每次走開時都在想,哇,那太神了。我應該學會那樣做。但我從來沒學會。
不過在你的電腦上安裝 Claude Code,有點像是隨時有 Tony 在你身邊。
那麼,Claude Code 在背後是怎麼運作的呢?
在 Anthropic,我們總是嘗試做那個我們稱為「有效且簡單」的事。對 Claude Code 來說,這意味著它是一個我們認為非常純粹的代理程式。在 Anthropic,當我們談論代理程式時,我們真正的意思是一些指令,一些強大的工具,然後你讓模型一直運行,直到它判定已完成。
這就是 Claude Code 的真正意義。所以它是工具,強大的工具,這些工具是精通終端機的人也能使用的——用來建立和編輯檔案的工具,來使用終端機。而且你還可以做一些像是用 MCP 拉取其他資料的事。
除此之外,Claude 如何理解整個程式庫。如果你一年前要打造一個程式代理或程式開發工具,你可能會有這樣的想法,好吧,我會收到使用者關於這個程式庫某事的訊息,然後我需要找出哪些檔案是相關的。所以也許我會將整個程式庫編索引、嵌入,再做這種複雜的 rag 檢索。
但這不是 Claude Code 的運作方式。我們不做任何形式的索引。取而代之,Claude 會探索並理解程式庫,就像你如果是新加入團隊並且是新接觸這個程式庫的開發者,會如何探索一個程式庫。這是透過有代理性的搜尋完成的。這和你我會用的搜尋工具差不多,像是 Glob、Grep 和 Find 這些工具。它可以穿越程式庫,了解裡面發生了什麼。
當我們談到有代理性的搜尋時,其實就是指模型可以去做一些搜尋,然後它可以看結果說,嗯,或許我還需要了解更多東西。我會去做更多搜尋,然後再回來。
在這些原始功能之上,在這個代理之上,我們有幾個功能。我們有一個非常棒且輕量的 UI 層,讓你能看到 Claude Code 如何工作。你會看到所有文字快速飛過。我們有這個很好的權限系統,讓代理程式能運作,並且在代理程式做危險的事情時,會迫使人類介入。除此之外,我們也非常重視這個工具的安全性。
由於 Claude Code 僅是模型之上的輕量層,且我們的模型不僅透過 Anthropic API 提供,同時也與我們的雲端服務供應商 AWS 和 GCP 一起提供,如果你比較喜歡這樣消費 Claude,指向其中一個服務對 Claude Code 來說是非常簡單且原生的做法。
很多人會問我,嘿,Cal,我可以用 Claude Code 做什麼?它擅長什麼?哪些地方很有趣?事實是,它其實對所有事情都還不錯。
那我們先從探索開始。在你的職涯中,你經常會被丟進一個新的程式庫,無論那是意味著你正在轉換團隊,還是轉換公司,我不知道,或是你開始參與某種開源專案。而且可能當你剛開始熟悉時,效率並不高,因為你只是試圖搞清楚程式庫中的位置,團隊通常使用的模式,諸如此類。
而 Claude Code 可以幫助極大地加速這個上手過程。你可以問 Claude,嘿,這個功能是在哪裡實現的?或者由於它在終端機中表現優秀,你可以說,嘿,看看這個檔案,看看 Git 歷史,然後給我講講這段程式在過去幾週怎麼變化的故事。
你可以用 Claude Code 做的一件事,我認為這被低估了,就是不是直接跳進去開始工作,你可以把 Claude Code 當作思想夥伴來使用。所以很多時候,當我在使用 Claude 並且想實現一個功能或準備更改一些東西時,我會打開 Claude 然後說,嘿,Claude,我正在考慮實現這個功能。你能不能先到處搜索一下,弄清楚我們怎麼做,然後回報兩三種不同的方案?不要開始動手做。還不要開始寫任何文本。
Claude 會利用那些具代理能力的搜尋功能,回來帶幾個點子給我。然後我可以跟 Claude 一起驗證這些方案。接著我們就可以跳入專案實作了。
當然,Claude Code 非常擅長建構和撰寫程式。我會從兩個不同層面來說這點。第一,它可以做到從零到一的建立工作。你把它丟進一個空目錄,然後說,嘿,幫我建一個應用程式,幫我建一個遊戲。這些示範運作得非常好。做起來非常有趣。這讓人感到非常滿足。
當然,實際上,真正重要的是 Claude Code 能在現有程式庫中良好運作。這是我們主要的關注點。而且 Claude Code 團隊在我們的程式庫中,有異常高的,我會說,是單元測試覆蓋率。那是因為 Claude Code 讓添加單元測試變得非常簡單且直接。所以我們有很好的程式覆蓋率。還有 Claude Code 自己的程式庫中,我們擁有卓越的提交記錄和 PR 訊息。因為完成工作時,我們就會說,嘿,Claude,替我寫提交記錄,替我寫 PR 訊息。
我們也看到在部署和生命週期的其他部分使用 Claude Code 的絕佳機會。還有其他幾位也提到了這點,但這是使用 Claude Code SDK。所以以無頭模式使用,程式化地使用,能夠隨處加入一個編碼代理。比如說,將它加入 CI/CD,在 GitHub 中使用,幫助人們程式化操作。
最後,它在支援和擴展方面也非常棒。它可以幫助你更快地除錯錯誤。當我們開始將 Claude Code 提供給客戶並與他們討論時,有件事我們沒完全預料到——許多客戶或潛在客戶說,嘿,我們一直在拖延這個大型基於程式的遷移。
比如說,那些仍在使用舊版本 Java 並試圖升級到新版本的團隊,或者使用 PHP 並嘗試轉向 React 或 Angular 的團隊。我們已經與多個這樣的團隊交談過。擁有像 Claude Code 這樣的工具,當你對團隊說,「嘿,我們將花一個月的時間重構或重寫程式庫的很大一部分」時,這樣的專案會變得比較容易接受。
除此之外——這在所有情況中都很重要——再次提醒,Claude 在終端機上表現優秀,這代表它在所有這些不同的 CLI 工具上也會很棒,像 Git、Docker、BigQuery 等等。我從不需要擔心說,「我要怎麼擺脫這個棘手的 rebase?」我只要啟動 Claude Code 告訴它情況,然後說,「嘿,你能幫我修復這個問題嗎?」真的很不可思議。
現在,讓我們談談最佳實踐。
第一個不會讓人感到驚訝,所以請記住,正如我所說,Claude Code 是一個代理。它有一些工具。它在提示中有一些輕量級的指令。但它並沒有真正的記憶。因此,當我們在同一個程式庫中一遍又一遍啟動 Claude Code 時,跨會話或跨團隊共享狀態的主要方式是這個 Claude.md 檔案。
所以當我們啟動 Claude 時,如果工作目錄中有這個 Claude.md 檔案,它就會直接被放入上下文中。它被放入提示中。基本上它是在說,嘿,Claude,順便說一下,這些是開發者為你留下的重要指令。務必仔細注意這些內容。
而且你可以把 Claude.md 檔案放在不同的地方。你可以把它放在專案中並提交,這樣你所有的隊友都能共享。你可以把一個放在你的家目錄裡,如果有些事情是你希望 Claude 總是知道的,無論你正在做什麼。
你放在這裡的東西就是那些,例如,嘿,順便說一下,也許這是你如何運行單元測試的方法。或者只是為了讓你的搜尋和生活更輕鬆,這裡提供了這個專案的整體概覽,測試在哪裡,以及不同模組是什麼,類似這樣的東西。或者這是我們的風格指南。各種這樣的東西,都是為了讓 Claude 的工作更輕鬆一些。你可以隨著時間慢慢累積這些東西。
你還可以做的另一件重要的事是權限管理。當你執行 Claude Code 時,會有各種不同類型的權限事項飛過來。基本上是開箱即用,當你啟動我們的工具時,對於讀取操作會發生什麼。如果 Claude 正在搜索或閱讀,我們就讓它繼續。但一旦它開始寫作或執行 bash 命令或做可能會改變你機器上東西的事情,這時我們會啟動這個介面,然後它會顯示類似「是的,是的,總是允許這個」或「不,我想做別的事情」的選項。
利用這種權限管理並且聰明地使用它,可以幫助你更快工作。有一種叫做自動接受模式的功能,當你使用 Claude Code 並按下 Shift-Enter 時,Claude 就會開始工作。你可以做一些事情。你可以在設定中配置 Claude,讓特定命令,比如在 bash 上,如果你只是厭倦了每次都說「是,執行 npm run test」,你可以設定總是自動批准。所以調整你的權限管理是一個加速工作流程的好方法。
整合設定。所以,有一件事會幫助你充分享受 Claude Code,那就是記住它在終端機中表現非常出色。如果你使用的一些應用程式有透過 CLI 訪問的方式,GitHub 就是一個很好的例子。他們有一個強大的工具叫做 GH。你基本上可以讓 Claude Code 做更多的工作。你可以透過安裝更多 CLI 工具或是連接更多 MCP 伺服器來達成這點。
我會說,根據經驗,如果你使用的是像 CLI 這種知名且有完善文件的工具,在 CLI 工具和直接安裝在機器上並使用 MCP 伺服器之間做選擇時,我建議使用 CLI 工具。
另外,如果你們內部有自己的工具,在 Anthropic,我們有一個叫做 Coo 的工具,為我們做了很多事情。你也可以告訴 Claude 關於那件事。那就是你會放進 Claude.md 的那種東西。
然後是上下文管理。所以記住,Claude 是一個代理。它所做的,就是呼叫這些工具。上下文會隨著時間累積越來越多。至少對 Anthropic 來說,我們的模型有 200,000 個字元的上下文視窗。你可以將這個視窗用到最大。
所以當你在一個長時間的 Claude 會話中,有兩個選項,你在工作,不斷來回互動。你會在右下角看到,開始出現這個小警告,會說,嘿,你開始填滿上下文視窗了。根據情況不同,你有兩個選擇。
你可以執行 /clear,重新開始。那會清除所有內容,除了例如 Claude.md。或者你可以執行 /compact。而且基本上會發生的事情就像是插入了一則使用者消息。它會說一些像是,嘿,我需要去總結我們一直在做的事情。我要把這交給另一位開發者。他們會從我停下的地方接手。然後那個總結就成了下一個會話的起始。你可以從那裡繼續下去。
我們花了很多時間調整這種緊湊功能,以便當你用盡上下文視窗然後執行緊縮時,你可以重新開始並繼續進行。
高效的工作流程。你可以用 Claude Code 做什麼?又如何才能最大限度地發揮它的效用?
#### 利用計劃和待辦事項 (00:15:21)
所以利用計劃和待辦事項。我之前提過一點。但你能做的最好的一件事是,當你打開 Claude Code 時,你不會說,嘿,我需要你修這個錯誤,而是可以說,嘿,我有這個錯誤。你能不能搜尋一下,找出原因,然後告訴我我們該怎麼解決的計劃?這可以幫你節省很多時間,因為你可以驗證,你可以閱讀 Claude 的計劃,驗證它將會做什麼。
另外,我們還有待辦清單功能。所以當 Claude 正在處理一個大任務時,它會建立一個待辦清單。如果你有注意看的話,你可以觀察這個待辦清單。如果你看到裡面有什麼奇怪或不合理的地方,這時你可以按 Escape 鍵並說,嘿,Claude,我們來改變這個待辦清單。我覺得你的方向錯了。
#### 智慧編碼氛圍 (00:16:06)
智慧編碼氛圍。所以讓 Claude 工作然後按 Enter,看結果會怎樣,這很誘人也很強大。我認為有幾件事可以讓這變得更好。而且,我想今天稍後有個專門討論這個話題 30 分鐘的講座。
但像是採用測試驅動開發,讓 Claude 進行小幅度的修改,執行測試,確保測試通過,並且總是讓 Claude 執行像是檢查 TypeScript 和程式格式化這類的工作,然後定期提交,這樣如果過程中出了問題,你總是可以回溯然後重試。
#### 使用截圖引導 (00:16:41)
你可以用截圖來引導和除錯,因為 Claude 是建立在我們的模型上,這些模型是多模態的。你總是可以截個圖,貼上去。或者如果你那裡有個圖片檔案,你就可以說,嘿,Claude,看看這個 mock.png,然後幫我建個網站或其他的。
還有進階技術。所以當你正在習慣使用 Claude 時,你能想到哪些方法,可以將事情推向下一個層次?
我們內部和客戶那邊都看到的一件事是,當你開始使用這個工具一段時間後,同時使用多個 Claudes 會變得非常誘人。我認識 Anthropic 的一些人和幾個客戶,他們同時運行四個 Claudes。有各種方法可以做到這點。你可以在 tmux 裡面或只是在不同的分頁中,用各種瘋狂的方法。所以我會挑戰你嘗試同時運行多個 Claudes,並協調這些事情。這非常有趣。我最多只能同時做兩個,但我知道有人能做到四個。
使用 Escape。Escape 是你最好的朋友。當 Claude 運作時,你可以密切關注它在做什麼,你也可以按 Escape 停止它,並插入說,嘿,我覺得你走錯路了,或者我希望你做些別的事情。知道什麼時候按 Escape 鍵是正確的時機,與讓 Claude 自行解決,是充分利用此工具的關鍵。
而且有個隱藏功能。不太多人知道,但是如果你按兩次 Escape,你其實可以跳回你的對話中。你可以回去,然後有點像重置。
工具擴展和 MCP。這是在下一個層級。如果你覺得 Bash 和 Claude 的工具還做不到什麼,那這時候你應該開始看看 MCP 伺服器。
然後是無頭自動化。我想這是我們最興奮的事情,但我們內部仍在努力理清,那就是我們如何以程式化方式使用 Claude。我們已經在 GitHub Actions 中有這個功能。我們想找出其他創意的地方開始使用它。我會挑戰你們大家也這麼做。
說到這裡,我要跳到我的電腦上,因為還有一項最佳做法,那就是保持對所有新事物的追蹤是很重要的。我們的更新速度非常快。我將簡單介紹幾樣今天最新的東西。
其中一件事是,現在你在雲端啟動它時,你可以輸入 /model。你可以看到目前正在使用的模型。我用的是預設的,剛好是 Sonnet。我們可以切換到 Opus。你也可以在 /config 裡做同樣的事情。在這裡切換它。這是新的功能。確保你正在運行適合你的模型。
還有一件關於這些模型的新事物,就是你可以說類似這樣的話,你能搞清楚這個專案裡有什麼嗎?有一段時間,我們有這個深度思考或延伸思考的功能。這當然很好,但以往的模型,我們不允許模型在工具呼叫之間思考。而這正是思考最重要的時候。
所以從 Claude 4 開始,我們的模型現在會在工具呼叫之間思考。我們可以目睹這個過程。這個專案中有 Claude。裡面有幾個不同的檔案。我只要告訴它要深入思考並搞清楚這個專案裡有什麼。我們可以看到 Claude 開始運作。你可以藉由看到較淺灰色的文字來知道你已觸發思考。接著它會呼叫一些檔案。它會呼叫一些工具。它會讀取一些內容。然後我們會看到更多的思考。這真是太棒了。
所以我鼓勵你們,在處理任務和解決錯誤時,多花點心思去思考。
然後還有一件事——你知道嗎?我們先快速展示一下——我在 VS Code 中有這個,但當然,JetBrains 中也有這個功能。我們對 VS Code 和 JetBrains 有這些很棒的新整合。我們可以做到像是雲端會知道我在哪個檔案裡,我現在在哪個檔案。這不是我想說的,但雲端會搞清楚的。你也可以這樣做。
所以這些是我鼓勵你們持續關注的事情。我們有一個公開的 GitHub 專案,叫做 Anthropic 底下的 Claude Code。你可以在那裡發佈問題。我們也會在那裡發佈更新日誌。所以我每週查看一次,確保自己掌握所有最新的發布內容,因為即使是我也跟不上它的速度。
所以話說回來,我們大約還有四分鐘的時間。我很樂意回答任何關於 Claude Code 相關的問題。我們這裡有它。如果你們有興趣,我可以現場演示一些功能。我們來做幾個問題吧。謝謝,說得快一點。
**問題**:這可能很明顯,但在一個專案中有多個 Claude.md 文件,我猜這是可能的,而且它會自動處理,對吧?
**回答**:這裡有幾個選項。當然,在同一目錄下是不行的。但你可以有一個在這裡,一個在子目錄中。我想我們改過這部分,讓所有子目錄的 Claude.md 不會被讀取,因為像 Anthropic,我們有一個 monorepo。人們會在頂層開啟它,然後因為所有的 Claude.md 而爆炸他們的上下文。
所以我們鼓勵 Claude 在搜尋時,如果發現子目錄中有相關的 Claude.md 文件,務必閱讀它們。但預設情況下,啟動時它只會讀取當前工作目錄下的 Claude.md 文件。
另外,你也可以在你的主目錄中設置一個。不過你可以做一些設定。我們有這個新功能。在你的 Claude.md 中,你可以開始引用其他文件。舉例來說,你可以用 @ 符號這樣做。如果你有其他 Claude.md 文件,並且你知道你總是想讀取它們,可以這麼做。
**問題**:嗨,好的。我一直無法讓 Claude 尊重我的 Claude.md。有一件特別的事,就是我會請它重構某段東西,然後它會留下內嵌註解解釋那是什麼。而那是非常明顯的東西。所以我會說,去除所有描述正在發生的事情的行內註解。然後它會移除它,接著在同一遍中立即再次執行。所以你有什麼策略來應對這種情況嗎?
**回答**:這裡有兩件事可以解決這個問題。這實際上是一個模型問題。提示中沒有任何相關內容。我們在 3.7 版本的提示中其實放了很多說明,說著,哇,別留下註解。儘管如此,模型還是很喜歡留註解。所以你的 Claude.md 沒多大幫助也就不足為奇了。
我們已經做了很多工作——我個人做了很多努力試圖壓制初始的行為。所以我們主要是在 Claude 4 中修正了這個問題。現在可能還會有一些新的奇怪行為怪癖。但我們在 Claude 4 裡還改善了另一件事,就是它更能遵從指令。
我們已經從早期測試者那裡收到了許多反饋,突然間,哇,我的 Claude.md 被更加密切地追蹤了。這可能是一個好機會去看看你的 Claude.md,並決定,我還需要這些東西嗎?也許我可以把一些東西拿掉。也許我需要添加一些新東西。
因此,轉向新模型可能是再次檢視裡面內容的好時機,看你需要什麼,什麼可能可以去掉。
**問題**:說到這裡,我正試著想一些你可能沒想到的事情。我們正在做多代理執行和並行化。你能否讓四個代理中,比如說,代理二和三使用來自代理一的上下文?也許代理四在某個階段使用來自代理二的上下文?
**回答**:是的。是的,等等。這很有趣。就像我一開始說的,我們正試圖做一件簡單有效的事,那就是只用一個擅長編碼且能做所有事情的 AI 代理。我想我們想搞清楚這點。
大概會發生的是,如果你想這麼做,你會讓所有的 AI 代理大概都寫入一個共用的 markdown 檔案之類的東西,這樣它們就能相互登記和溝通。
有時我會跟 Claude 合作,我會直接說,嘿,我需要你在 ticket.md 裡寫一些給另一個開發者的東西。然後我會開啟另一個 Claude 編碼模型。我會說,嘿,讀讀 ticket.md。另一個開發者為你留了這個便條。這是你接下來要處理的工作。
所以我會想著嘗試把狀態寫入檔案,然後信賴模型能讀檔案並理解它們。這大概是你今天能做到的最好方法。也許我們會想出巧妙的方法,將這些以更原生的方式呈現在產品中。
酷。好吧。說到這裡,我在背包裡找到了一些罕見的 Claude 代碼貼紙。所以來找我吧。我會在那邊待著或什麼的。很樂意與你分享。謝謝大家。
[掌聲]